<?php
/**
 * User: LRZ
 * Date: 2020/3/2
 * Time: 14:41
 */

/**
 *  387.字符串中的第一个唯一字符
 *
 *  标签：哈希表、字符串
 *
 *  给定一个字符串，找到它的第一个不重复的字符，并返回它的索引。如果不存在，则返回 -1。
 *
 *  示例 1:
 *      输入：s = "leetcode"
 *      输出：0.
 *
 *  示例 2:
 *      输入：s = "loveleetcode",
 *      输出：2
 *   
 *  注意事项：您可以假定该字符串只包含小写字母。
 *
 *  来源：力扣（LeetCode）
 *  链接：https://leetcode-cn.com/problems/first-unique-character-in-a-string
 *  著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

$start = microtime(true);

$s   = 'leetcode';
$res = firstUniqChar($s);

$end = microtime(true);
print_r($res);
printf(' total run: %.2f s<br>' . 'memory usage: %.2f M<br> ', $end - $start, memory_get_usage() / 1024 / 1024);

function firstUniqChar($s)
{
    $length = strlen($s);
    $hash   = []; # 定义哈希表，里面保存字母下标和出现次数
    for ($i = 0; $i < $length; $i++) {
        if (isset($hash[$s[$i]])) {
            $hash[$s[$i]]['value']++;
        } else {
            $hash[$s[$i]] = [
                'index' => $i,
                'value' => 1
            ];
        }
    }
    foreach ($hash as $v) {
        if ($v['value'] === 1) {
            return $v['index'];
        }
    }
    return -1;
}